﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Office.Interop.Excel;
using System.Threading;
using System.Reflection;

namespace SimulacionExcelIne
{
    public class SimulacionLibro : ConexionExcel
    {
        //pivote de los pesos
        private string PivotePesos;
        //Error
        private string errorAceptado;

        //Lista De Hojas en la que se hará la simulación en paralelo

        //Libro en donde se guardarán las hojas con los resultados

        //En donde almacenaremos los cambios

        //Tomamos el libroAlmacenada en memoria y aplicamos la simulacion a cada unas de 
        //sus hojas
        public SimulacionLibro(string path, string epsilon, System.Windows.Controls.ProgressBar barra)
            :base(path)
        {
            errorAceptado = epsilon;
        }//Desarrollado

        public void GuardarSimulacion() 
        {        
            foreach (Workbook i in ArchivoConsulta.Workbooks)
            {
                i.SaveAs(DateTime.Now.ToString().Replace("/", "").Replace(":", ""));
            }
            base.cerrarLibro();
        }//En desarrollo

        internal int get_tamanioLibro()
        {
            return ArchivoConsulta.Worksheets.Count;
        }

        internal void EstandarizarArchivo(MainWindow mainWindow, ActualizarBarra delegadoBarra)
        {
            double index = 0;

            foreach (Worksheet i in ArchivoConsulta.Worksheets)
            {
                EstandarizacionHojaExcel.EliminarCeldasBasura(i);
                EstandarizacionHojaExcel.FormatearBordesDatosIniciales(i);
                SimulacionHoja.GenerarNumeroAleatorios(i);
                SimulacionHoja.GenerarTablaAleatoriaOrdenados(i);
                SimulacionHoja.GenerarFibradoTangente(i, errorAceptado.ToString().Replace(".", ","));
                SimulacionHoja.EliminarNumerosAleatorios(i);
                SimulacionHoja.GenerarInforme(i, errorAceptado.ToString().Replace(".", ","));

                SimulacionHoja.CalculoPesosEspecificos(i);
                //Manejo del hilo
                mainWindow.Dispatcher.Invoke(delegadoBarra, new Object[] { 1, Convert.ToDouble(ArchivoConsulta.Worksheets.Count), index });
                index++;
            }
        }
    }
}
